package com.example.service;

import com.example.common.enums.ResultCodeEnum;
import com.example.common.enums.RoleEnum;
import com.example.entity.Account;
import com.example.entity.College;
import com.example.exception.CustomException;
import com.example.mapper.CollegeMapper;
import com.example.utils.TokenUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import jakarta.annotation.Resource;
import java.util.List;

/**
 * 学院信息表业务处理
 **/
@Service
public class CollegeService {

    @Resource
    private CollegeMapper collegeMapper;

    /**
     * 新增
     * 权限控制：只有管理员可以新增学院
     */
    public void add(College college) {
        Account currentUser = TokenUtils.getCurrentUser();
        if (currentUser != null && !RoleEnum.ADMIN.name().equals(currentUser.getRole())) {
            throw new CustomException(ResultCodeEnum.NO_AUTH);
        }
        collegeMapper.insert(college);
    }

    /**
     * 删除
     * 权限控制：只有管理员可以删除学院
     */
    public void deleteById(Integer id) {
        Account currentUser = TokenUtils.getCurrentUser();
        if (currentUser != null && !RoleEnum.ADMIN.name().equals(currentUser.getRole())) {
            throw new CustomException(ResultCodeEnum.NO_AUTH);
        }
        collegeMapper.deleteById(id);
    }

    /**
     * 批量删除
     * 权限控制：只有管理员可以批量删除学院
     */
    public void deleteBatch(List<Integer> ids) {
        Account currentUser = TokenUtils.getCurrentUser();
        if (currentUser != null && !RoleEnum.ADMIN.name().equals(currentUser.getRole())) {
            throw new CustomException(ResultCodeEnum.NO_AUTH);
        }
        // 使用 Java 21 增强的 Stream API
        ids.forEach(collegeMapper::deleteById);
    }
    /**
     * 修改
     * 权限控制：只有管理员可以修改学院
     */
    public void updateById(College college) {
        Account currentUser = TokenUtils.getCurrentUser();
        if (currentUser != null && !RoleEnum.ADMIN.name().equals(currentUser.getRole())) {
            throw new CustomException(ResultCodeEnum.NO_AUTH);
        }
        collegeMapper.updateById(college);
    }

    /**
     * 根据ID查询
     */
    public College selectById(Integer id) {
        return collegeMapper.selectById(id);
    }

    /**
     * 查询所有
     * 权限控制：教师只能查看自己所在的学院
     */
    public List<College> selectAll(College college) {
        // 获取当前登录用户
        Account currentUser = TokenUtils.getCurrentUser();
        if (currentUser != null && RoleEnum.TEACHER.name().equals(currentUser.getRole())) {
            // 如果是教师，需要先获取教师的学院信息
            com.example.entity.Teacher teacher = (com.example.entity.Teacher) currentUser;
            if (teacher.getCollegeId() != null) {
                // 只返回教师所在的学院
                college.setId(teacher.getCollegeId());
            }
        }
        return collegeMapper.selectAll(college);
    }

    /**
     * 分页查询
     * 权限控制：教师只能查看自己所在的学院
     */
    public PageInfo<College> selectPage(College college, Integer pageNum, Integer pageSize) {
        // 获取当前登录用户
        Account currentUser = TokenUtils.getCurrentUser();
        if (currentUser != null && RoleEnum.TEACHER.name().equals(currentUser.getRole())) {
            // 如果是教师，需要先获取教师的学院信息
            com.example.entity.Teacher teacher = (com.example.entity.Teacher) currentUser;
            if (teacher.getCollegeId() != null) {
                // 只返回教师所在的学院
                college.setId(teacher.getCollegeId());
            }
        }
        
        PageHelper.startPage(pageNum, pageSize);
        List<College> list = collegeMapper.selectAll(college);
        return PageInfo.of(list);
    }

}
